package runtimepermissiontest;

import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;
import androidx.core.app.ActivityCompat;
import androidx.core.content.ContextCompat;
import snbc.com.runtimepermissiontest.R;

import android.Manifest;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.net.Uri;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import android.widget.Toast;

/*在程序运行时申请权限 -- 打电话权限*/
public class MainActivity extends AppCompatActivity {
    private Button btn_call;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        findView();
        btn_call.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                /*先判断用户是否授予app权限 2个参数：1.Context 2.具体的权限名，例如打电话的权限 Manifest.permission.CALL_PHONE
                 *返回值和 PackageManager.PERMISSION_GRANTED进行比较 相等说明已授权，不等没有授权
                 */
                if (ContextCompat.checkSelfPermission(MainActivity.this, Manifest.permission.CALL_PHONE) != PackageManager.PERMISSION_GRANTED) {
                    /* 调用 ActivityCompat.requestPermissions 向用户申请权限
                     * 3个参数：1.Activity的实例，当前活动 2.String类型数组，将申请的权限名写咋数组中 3.请求码：保持唯一即可
                     * */
                    ActivityCompat.requestPermissions(MainActivity.this, new String[]{Manifest.permission.CALL_PHONE}, 1);
                    /*调用完ActivityCompat.requestPermissions 后会弹出一个申请权限的对话框，用户可以选择同一或拒绝权限申请
                     * 不管选择哪一种 都会回调到onRequestPermissionsResult 法中，需要在判断。
                     * */
                } else {
                    call();
                }

            }
        });

    }

    private void call() {
        Intent intent = new Intent(Intent.ACTION_CALL);
        intent.setData(Uri.parse("tel:17853505707"));
        startActivity(intent);
    }

    private void findView() {
        btn_call = findViewById(R.id.btn_call);

    }

    /*不管选择哪一种都会回调到onRequestPermissionsResult 方法中，需要在此判断。
     * 授权结果封装在grantResults中
     * */
    @Override
    public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
        super.onRequestPermissionsResult(requestCode, permissions, grantResults);
        switch (requestCode) {
            case 1:
                // 对授权结果进行判断
                if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
                    call();
                } else {
                    Toast.makeText(MainActivity.this, "You denied the permission", Toast.LENGTH_LONG).show();
                }
                break;
            default:
                break;
        }
    }
}
